package com.jacobson.core.widget.logger

/**
 * ================================================
 * 日志接口标准
 * @author Wucz on 2018/7/17 11:06
 * ================================================
 */

interface Logger {

    /**
     * Verbose级别
     *
     * @param msg    日志
     * @param params 参数
     */
    fun v(msg: String, vararg params: Any): Int

    /**
     * Verbose级别,异常输出
     *
     * @param msg    日志
     * @param tr     异常
     * @param params 参数
     */
    fun v(msg: String, tr: Throwable, vararg params: Any): Int

    /**
     * Debug级别日志
     *
     * @param msg    日志
     * @param params 参数
     */
    fun d(msg: String, vararg params: Any): Int

    /**
     * Debug级别日志，异常日志输出
     *
     * @param msg    日志
     * @param tr     异常
     * @param params 参数
     */
    fun d(msg: String, tr: Throwable, vararg params: Any): Int

    /**
     * Info级别日志
     *
     * @param msg    日志
     * @param params 参数
     */
    fun i(msg: String, vararg params: Any): Int

    /**
     * Info级别日志，异常日志输出
     *
     * @param msg    日志
     * @param tr     异常
     * @param params 参数
     */
    fun i(msg: String, tr: Throwable, vararg params: Any): Int

    /**
     * Warn级别日志
     *
     * @param msg    日志
     * @param params 参数
     */
    fun w(msg: String, vararg params: Any): Int

    /**
     * Warn级别日志，异常日志输出
     *
     * @param msg    日志
     * @param tr     异常
     * @param params 参数
     */
    fun w(msg: String, tr: Throwable, vararg params: Any): Int

    /**
     * Error级别日志
     *
     * @param msg    日志
     * @param params 参数
     */
    fun e(msg: String, vararg params: Any): Int

    /**
     * Error级别日志，异常日志输出
     *
     * @param msg    日志
     * @param params 参数
     */
    fun e(msg: String, tr: Throwable, vararg params: Any): Int

    /**
     * Assert级别日志输出
     *
     * @param msg    日志
     * @param params 参数
     */
    fun wtf(msg: String, vararg params: Any): Int

    /**
     * Assert级别日志输出，异常日志
     *
     * @param msg    日志
     * @param tr     异常
     * @param params 参数
     */
    fun wtf(msg: String, tr: Throwable, vararg params: Any): Int

    /**
     * 输出JSON， 默认Debug级别
     *
     * @param json   json日志
     * @param params 参数
     */
    fun json(json: String, vararg params: Any): Int

    /**
     * 输出指定日志级别的Json日志
     *
     * @param level  日志级别
     * @param json   json日志
     * @param params 参数
     */
    fun json(level: Int, json: String, vararg params: Any): Int

    /**
     * 输出XML日志， 默认Debug级别
     *
     * @param xml    xml日志
     * @param params 参数
     */
    fun xml(xml: String, vararg params: Any): Int

    /**
     * 输出指定日志级别的Xml日志
     *
     * @param level  日志级别
     * @param xml    xml
     * @param params 参数
     */
    fun xml(level: Int, xml: String, vararg params: Any): Int

    /**
     * 日志级别
     */
    interface Level {
        companion object {
            /**
             * Verbose级别
             */
            const val VERBOSE = 1
            /**
             * Debug级别
             */
            const val DEBUG = 2
            /**
             * Info级别
             */
            const val INFO = 3
            /**
             * Warn级别
             */
            const val WARN = 4
            /**
             * Error级别
             */
            const val ERROR = 5
            /**
             * Assert级别
             */
            const val ASSERT = 6
        }
    }

    /**
     * 日志类型
     */
    interface Type {
        companion object {
            /**
             * 正常类型String
             */
            const val NORMAL = 1
            /**
             * JSON类型
             */
            const val JSON = 2
            /**
             * XML类型
             */
            const val XML = 3
        }
    }
}